<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title>Change a layer's color with buttons</title>
    <meta
      name="viewport"
      content="initial-scale=1,maximum-scale=1,user-scalable=no"
    />
    <script src="../../lib/mapbox-gl.js"></script>
    <link href="../../lib/mapbox-gl.css" rel="stylesheet" />
    <script src="../../lib/axios.min.js"></script>
    <style>
      body {
        margin: 0;
        padding: 0;
      }
      #map {
        position: absolute;
        top: 0;
        bottom: 0;
        width: 100%;
      }
      .map-overlay {
        font: 12px/20px "Helvetica Neue", Arial, Helvetica, sans-serif;
        position: absolute;
        width: 200px;
        top: 0;
        left: 0;
        padding: 10px;
      }

      .map-overlay .map-overlay-inner {
        background-color: #fff;
        box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);
        border-radius: 3px;
        padding: 10px;
        margin-bottom: 10px;
      }

      .map-overlay-inner fieldset {
        border: none;
        padding: 0;
        margin: 0 0 10px;
      }

      .map-overlay-inner fieldset:last-child {
        margin: 0;
      }

      .map-overlay-inner select {
        width: 100%;
      }

      .map-overlay-inner label {
        display: block;
        font-weight: bold;
        margin: 0 0 5px;
      }

      .map-overlay-inner button {
        display: inline-block;
        width: 36px;
        height: 20px;
        border: none;
        cursor: pointer;
      }

      .map-overlay-inner button:focus {
        outline: none;
      }

      .map-overlay-inner button:hover {
        box-shadow: inset 0 0 0 3px rgba(0, 0, 0, 0.1);
      }
    </style>
  </head>
  <body>
    <div id="map"></div>
    <div class="map-overlay top">
      <div class="map-overlay-inner">
        <fieldset>
          <label>Select layer</label>
          <select id="layer" name="layer">
            <option value="water">Water</option>
            <option value="building">building</option>
            <option value="transportation-3">transportation</option>
          </select>
        </fieldset>
        <fieldset>
          <label>Choose a color</label>
          <div id="swatches"></div>
        </fieldset>
      </div>
    </div>
    <script>
      let baseDataUrl = `http://${localStorage.getItem(
        "host"
      )}/mapbox-gl-js-offline-examples`;
      axios
        .get(
          baseDataUrl +
            `/resources/styles/${localStorage.getItem(
              "mbtilesStylesName"
            )}.json`
        )
        .then((res) => {
          let data = res.data;
          initMap(data);
        })
        .catch((err) => {
          console.error(err);
        });

      function initMap(style) {
        let map = new mapboxgl.Map({
          container: "map",
          center: [116.392, 39.917],
          zoom: 15.5,
          bearing: -2.5,
          style: style,
        });

        var swatches = document.getElementById("swatches");
        var layer = document.getElementById("layer");
        var colors = [
          "#ffffcc",
          "#a1dab4",
          "#41b6c4",
          "#2c7fb8",
          "#253494",
          "#fed976",
          "#feb24c",
          "#fd8d3c",
          "#f03b20",
          "#bd0026",
        ];

        colors.forEach(function (color) {
          var swatch = document.createElement("button");
          swatch.style.backgroundColor = color;
          swatch.addEventListener("click", function () {
            if (layer.value === "water") {
              map.setPaintProperty(layer.value, "fill-color", color);
            } else if (layer.value === "building") {
              map.setPaintProperty(layer.value, "fill-color", color);
            } else if (layer.value === "transportation-3") {
              map.setPaintProperty(layer.value, "line-color", color);
            }
          });
          swatches.appendChild(swatch);
        });
      }
    </script>
  </body>
</html>
